package br.affero.web.controller;

import java.io.Serializable;
import java.util.List;

import javax.enterprise.inject.Produces;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.jboss.solder.logging.Logger;

import br.affero.core.person.dao.PersonDao;
import br.affero.core.person.model.Person;
import br.affero.util.JsfUtil;

@Named("personController")
@ViewScoped
public class PersonController implements Serializable {
    private static Logger logger = Logger.getLogger(PersonController.class);
    private static final String GENERIC_ERROR = "Ocorreu um erro genérico!";
    
    private List<Person> personList = null;
    
    @Inject
	PersonDao personDao;


    /**
     * Resetar informações do controller
     */
   /* private void reset() {
            personList = null;
    }*/

    /**
     * Obter lista de pessoa
     * 
     * @return
     */
    public List<Person> getPersonList() {
            if (personList == null) {
                    try {
                            personList = personDao.findAll();
                    } catch (Exception e) {                         
                            JsfUtil.addErrorMessage(GENERIC_ERROR);
                            logger.error(GENERIC_ERROR,e);
                    }
            }
            return personList;
    }

    /**
     * Remover pessoa
     * 
     * @return próxima ação jsf
     */
    public String delete(Person person) {
            
            try {    
                    // remover pessoa
                    personDao.delete(person);
                    personDao.flush();
                    //reset();
            } catch (Exception e) {
                    logger.error(GENERIC_ERROR,e);
                    JsfUtil.addErrorMessage(GENERIC_ERROR);
            }
                    

            return "/pages/person/list.xhtml";
    }

    /**
     * Ativar/Inativar pessoa
     * 
     * @return Boolean true em caso de sucesso
     */
    public Boolean activeChange(Person person) {
            
            try {
                    // inverter o booleano do campo active
                    person.toggleActive();
                    // salvar informação no banco
                    //personDao.saveOrUpdate(person);
                    personDao.flush();
                    
                    //reset();          
            } catch (Exception e) {
                    logger.error(GENERIC_ERROR,e);
                    JsfUtil.addErrorMessage(GENERIC_ERROR);
                    return false;
            }

            return true;
    }
    
   
}
